home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / term.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  4KB  |  210 lines

  1. /* --------------------------------- term.c --------------------------------- */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* shutdown code.
  8. */
  9.  
  10. #include "fly.h"
  11.  
  12.  
  13. #define LFRAC_RES    1000L
  14.  
  15. LOCAL_FUNC char * NEAR
  16. lfrac (long a, long b, long ldiv)
  17. {
  18.     int        s, f;
  19.     long        l;
  20.     static char    buf[20];
  21.  
  22.     if (a < 0x7fffffffL/ldiv)
  23.         l = a * ldiv / b;
  24.     else if (b >= ldiv)
  25.         l = a / (b / ldiv);
  26.     else
  27.         return ("999.999");            /* see LFRAC_RES */
  28.     if (l) {
  29.         if (T(s = l < 0)) {
  30.             f = (int)((-l)%LFRAC_RES);
  31.             l = -((-l)/LFRAC_RES);
  32.         } else {
  33.             f = (int)(l%LFRAC_RES);
  34.             l = l/LFRAC_RES;
  35.         }
  36.         if (s && !l)
  37.             sprintf (buf, "  -0.%03d", f);    /* see LFRAC_RES */
  38.         else
  39.             sprintf (buf, "%4ld.%03d", l, f); /* see LFRAC_RES */
  40.         return (buf);
  41.     } else
  42.         return ("0");
  43. }
  44. #undef LFRAC_RES
  45.  
  46. extern void FAR
  47. terminate (int StackUsed)
  48. {
  49.     Ulong        lt;
  50.     struct netname    *nn;
  51.     static int    depth = 0;
  52.  
  53.     if (++depth > 4)    /* must be looping, can't tell the world :-( */
  54.         return;
  55.  
  56.     log_flush (1);
  57.  
  58.     st.flags &= ~SF_INITED;
  59.  
  60.     if (Tm) {
  61.         lt = st.present / 1000L;
  62.         LogPrintf ("Time     %lu:%02lu\n", lt/60L, lt%60L);
  63.     }
  64.  
  65.     if (STATS_FRAMESCOUNT) {
  66.         LogPrintf ("nFrames  %s\n", show_l (STATS_FRAMESCOUNT));
  67.         if (T(lt = STATS_TIMETOTAL / 1000L))
  68.             LogPrintf ("frm/sec %s\n",
  69.                 lfrac (STATS_FRAMESCOUNT, lt, 10000L));
  70.         LogPrintf ("           ms/frm\n");
  71.         LogPrintf ("Total    %s\n",
  72.             lfrac (STATS_TIMETOTAL, STATS_FRAMESCOUNT, 100L));
  73.         LogPrintf ("Video    %s\n",
  74.             lfrac (STATS_TIMEVIDEO, STATS_FRAMESCOUNT, 100L));
  75.         LogPrintf ("3D       %s\n",
  76.             lfrac (STATS_TTIME3D, STATS_FRAMESCOUNT, 100L));
  77.         LogPrintf ("2D       %s\n",
  78.             lfrac (STATS_TTIMEHDD, STATS_FRAMESCOUNT, 100L));
  79.         LogPrintf ("Simulate %s\n",
  80.             lfrac (STATS_TTIMESIM, STATS_FRAMESCOUNT, 100L));
  81.         LogPrintf ("PageFlip %s\n",
  82.             lfrac (STATS_TTIMESYNC, STATS_FRAMESCOUNT, 100L));
  83.         LogPrintf ("Balance  %s\n",
  84.             lfrac (STATS_TIMETOTAL - STATS_TIMEVIDEO -
  85.                     STATS_TTIME3D -STATS_TTIMESIM -
  86.                     STATS_TTIMESYNC - STATS_TTIMEHDD,
  87.                 STATS_FRAMESCOUNT, 100L));
  88.     }
  89.  
  90.     stats_show ();
  91.  
  92.     nav_term ();
  93.  
  94.     remote_term ();
  95.  
  96.     if (CC)
  97.         LogPrintf ("score    %u\n", (int)CC->score);
  98.     CV = CC = 0;
  99.  
  100.     list_clear (&CO);
  101.  
  102.     land_term ();
  103.  
  104.     LogPrintf ("bullets  %s\n", show_l (st.nbullets));
  105.     LogPrintf ("last obj %s\n", show_l (st.object_id));
  106.  
  107.     bodies_term ();
  108.  
  109.     buffers_term ();
  110.  
  111.     pointers_term ();
  112.  
  113.     funcs_term ();
  114.  
  115.     if (Snd) {
  116.         Snd->Term ();
  117.         sound_term ();
  118.         Snd = &SndNone;
  119.     }
  120.  
  121.     mac_term ();
  122.  
  123.     if (Kbd) {
  124.         Kbd->Term ();
  125.         kbrd_term ();
  126.         Kbd = &KbdNone;
  127.     }
  128.  
  129.     DEL0 (CW);
  130.     DEL0 (CP);
  131.     if (CS) {
  132.         if (CS->device) {
  133.             if (Gr) {
  134.                 if (Gr->Shutters)
  135.                     Gr->Shutters (-2);    /* turn off */
  136.                 Gr->Term (CS->device);
  137.             }
  138.             CS->device = 0;
  139.         }
  140.         DEL0 (CS);
  141.     }
  142.  
  143.     windows_term ();
  144.  
  145.     devices_release ();
  146.     devices_term ();
  147.  
  148.     st.iname = STRfree (st.iname);
  149.     st.mname = STRfree (st.mname);
  150.     st.fname = STRfree (st.fname);
  151.     st.vmdname = STRfree (st.vmdname);
  152.     st.navname = STRfree (st.navname);
  153.     st.lndname = STRfree (st.lndname);
  154.     st.fdir = STRfree (st.fdir);
  155.     st.ptrname = STRfree (st.ptrname);
  156.     st.grname = STRfree (st.grname);
  157.     st.grmname = STRfree (st.grmname);
  158.     st.sndname = STRfree (st.sndname);
  159.     st.kbdname = STRfree (st.kbdname);
  160.     st.nikname = STRfree (st.nikname);
  161.     st.teamname = STRfree (st.teamname);
  162.     st.homename = STRfree (st.homename);
  163.     st.timeropts = STRfree (st.timeropts);
  164.     st.ptype = STRfree (st.ptype);
  165.     st.dtype = STRfree (st.dtype);
  166.     st.initkeys = STRfree (st.initkeys);
  167.  
  168.     for (nn = st.netnames; nn;) {
  169.         STRfree (nn->name);
  170.         nn = DEL (nn);
  171.     }
  172.  
  173.     if (st.flags & SF_SKY)
  174.         sky_term ();
  175.  
  176.     edit_term ();
  177.  
  178.     msg_term ();
  179.  
  180. /* We terminate the memory mgr before the log mgr to allow logging of stats.
  181. */
  182.     mem_term ();
  183.  
  184.     LogPrintf ("stack used: %d bytes\n", StackUsed);
  185.     LogPrintf ("Fly8 end: %s\n", Tm->Ctime ());
  186.  
  187.     log_term ();
  188.     st.lname = xfree (st.lname);
  189.  
  190.     if (Tm) {
  191.         Tm->Term ();
  192.         Tm = &TmNone;
  193.     }
  194.  
  195.     if (Sys) {
  196.         Sys->Term ();
  197.         Sys = &SysNone;
  198.     }
  199.     --depth;
  200. }
  201.  
  202. extern void FAR
  203. die (void)
  204. {
  205.     st.flags &= ~(SF_INITED|SF_INTERACTIVE);
  206.     LogPrintf ("Aborting...\n");
  207.     terminate (0);
  208.     exit (1);
  209. }
  210.